home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / puma.lha / puma / src / Tree2.mi < prev    next >
Text File  |  1992-09-25  |  4KB  |  181 lines

  1. IMPLEMENTATION MODULE Tree2;
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. IMPORT SYSTEM, System, General, Memory, DynArray, IO, Layout, StringMem, Strings, Idents, Texts, Sets, Positions;
  48. FROM Tree IMPORT tTree, NoTree, tProcTree, MakeTree, IsType, yyExit,
  49. Classes, 
  50. NoClass, 
  51. Class, 
  52. Attributes, 
  53. NoAttribute, 
  54. AttrOrAction, 
  55. Child, 
  56. Attribute, 
  57. ActionPart, 
  58. yyAlloc, yyPoolFreePtr, yyPoolMaxPtr, yyNodeSize;
  59.  
  60. (* line 143 "" *)
  61. (* line 417 "" *)
  62. (* line 822 "" *)
  63.  
  64.  
  65. TYPE yyPtrtTree    = POINTER TO tTree;
  66.  
  67. VAR yyf    : IO.tFile;
  68. VAR yyLabel    : SHORTCARD;
  69. VAR yyKind    : SHORTCARD;
  70. VAR yyc    : CHAR;
  71. VAR yys    : Strings.tString;
  72.  
  73. CONST yyInitTreeStoreSize    = 32;
  74.  
  75. VAR yyTreeStoreSize    : LONGINT;
  76. VAR yyTreeStorePtr    : POINTER TO ARRAY [0..50000] OF tTree;
  77. VAR yyLabelCount    : INTEGER;
  78. VAR yyRecursionLevel    : SHORTINT;
  79.  
  80. PROCEDURE yyMapToLabel (yyTree: tTree): SHORTCARD;
  81.  VAR yyi    : INTEGER;
  82.  BEGIN
  83.   FOR yyi := 1 TO yyLabelCount DO
  84.    IF yyTreeStorePtr^[yyi] = yyTree THEN RETURN yyi; END;
  85.   END;
  86.   INC (yyLabelCount);
  87.   IF yyLabelCount = yyTreeStoreSize THEN
  88.    DynArray.ExtendArray (yyTreeStorePtr, yyTreeStoreSize, SYSTEM.TSIZE (tTree));
  89.   END;
  90.   yyTreeStorePtr^[yyLabelCount] := yyTree;
  91.   RETURN yyLabelCount;
  92.  END yyMapToLabel;
  93.  
  94. PROCEDURE yyMapToTree (yyLabel: SHORTCARD): tTree;
  95.  BEGIN RETURN yyTreeStorePtr^[yyLabel]; END yyMapToTree;
  96.  
  97. CONST yyNil    = 374C;
  98. CONST yyNoLabel    = 375C;
  99. CONST yyLabelDef    = 376C;
  100. CONST yyLabelUse    = 377C;
  101.  
  102. PROCEDURE GetTree2 (yyyf: IO.tFile): tTree;
  103.  VAR yyt    : tTree;
  104.  BEGIN
  105.   yyf := yyyf;
  106.   IF yyRecursionLevel = 0 THEN yyLabelCount := 0; END;
  107.   INC (yyRecursionLevel);
  108.   yyGetTree2 (SYSTEM.ADR (yyt));
  109.   DEC (yyRecursionLevel);
  110.   RETURN yyt;
  111.  END GetTree2;
  112.  
  113. PROCEDURE yyGetTree2 (yyt: yyPtrtTree);
  114.  BEGIN
  115.   LOOP
  116.    yyc := IO.ReadC (yyf);
  117.    CASE yyc OF
  118.    | yyNil    : yyt^ := NoTree; RETURN;
  119.    | yyLabelUse    : yyGet (yyLabel); yyt^ := yyMapToTree (yyLabel); RETURN;
  120.    | yyLabelDef    : yyGet (yyLabel); yyKind := ORD (IO.ReadC (yyf)); yyt^ := MakeTree (yyKind);
  121.     IF yyLabel # yyMapToLabel (yyt^) THEN IO.WriteS (IO.StdError, 'Tree2: error in GetTree2'); IO.WriteNl (IO.StdError); yyExit; END;
  122.    ELSE yyKind := ORD (yyc); yyt^ := MakeTree (yyKind);
  123.    END;
  124.  
  125.    CASE yyKind OF
  126. | Class:
  127. yyGetIdent (yyt^^.Class.Name);
  128. yyGet (yyt^^.Class.Properties);
  129. yyGetTree2 (SYSTEM.ADR (yyt^^.Class.Attributes));
  130. yyGetTree2 (SYSTEM.ADR (yyt^^.Class.Extensions));
  131. yyGetTree2 (SYSTEM.ADR (yyt^^.Class.BaseClass));
  132. yyt := SYSTEM.ADR (yyt^^.Class.Next);
  133. | AttrOrAction:
  134. yyt := SYSTEM.ADR (yyt^^.AttrOrAction.Next);
  135. | Child:
  136. yyGetIdent (yyt^^.Child.Name);
  137. yyGetIdent (yyt^^.Child.Type);
  138. yyGet (yyt^^.Child.Properties);
  139. yyt := SYSTEM.ADR (yyt^^.Child.Next);
  140. | Attribute:
  141. yyGetIdent (yyt^^.Attribute.Name);
  142. yyGetIdent (yyt^^.Attribute.Type);
  143. yyGet (yyt^^.Attribute.Properties);
  144. yyt := SYSTEM.ADR (yyt^^.Attribute.Next);
  145. | ActionPart:
  146. yyt := SYSTEM.ADR (yyt^^.ActionPart.Next);
  147.    ELSE RETURN;
  148.    END;
  149.   END;
  150.  END yyGetTree2;
  151.  
  152. PROCEDURE yyGet (VAR yyx: ARRAY OF SYSTEM.BYTE);
  153.  VAR yyi    : INTEGER;
  154.  BEGIN
  155.   yyi := IO.Read (yyf, SYSTEM.ADR (yyx), INTEGER (HIGH (yyx)) + 1);
  156.  END yyGet;
  157.  
  158. PROCEDURE yyGetIdent (VAR yyi: Idents.tIdent);
  159.  VAR yys    : Strings.tString;
  160.  BEGIN
  161.   Strings.ReadL (yyf, yys);
  162.   yyi := Idents.MakeIdent (yys);
  163.  END yyGetIdent;
  164.  
  165. PROCEDURE BeginTree2;
  166.  BEGIN
  167. (* line 297 "" *)
  168. (* line 749 "" *)
  169.  END BeginTree2;
  170.  
  171. PROCEDURE CloseTree2;
  172.  BEGIN
  173.  END CloseTree2;
  174.  
  175. BEGIN
  176.  yyRecursionLevel := 0;
  177.  yyTreeStoreSize := yyInitTreeStoreSize;
  178.  DynArray.MakeArray (yyTreeStorePtr, yyTreeStoreSize, SYSTEM.TSIZE (tTree));
  179.  BeginTree2;
  180. END Tree2.
  181.